package com.spzx.product;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.spzx.common.core.web.controller.BaseController;
import com.spzx.common.core.web.domain.BaseEntity;

public class GenMP {

    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://192.168.100.100:3306/spzx-product?characterEncoding=utf-8&useSSL=false", "root", "root")
                .globalConfig(builder -> builder
                                .author("atguigu")
                                // 设置输出目录 代码生成的保存目录
                                .outputDir("D:/spzx/product")
                                // 时间策略 日期类型为 Date(java.util.Date)
                                .dateType(DateType.ONLY_DATE)
                        // 代码生成之后是否打开文件夹 默认打开
//                        .disableOpenDir()
                )
                // 包配置
                // 设置包名 和 每一层的位置
                .packageConfig(builder -> builder
                        .parent("com.spzx.product")
                        .entity("domain")
                        .mapper("mapper")
                        .xml("mapper.product")
                        .service("service")
                        .serviceImpl("service.impl")
                        .controller("controller")
                )
                // 策略配置
                // 添加需要生成的表名 // 对哪些表进行代码生成
                .strategyConfig(builder -> builder
                        .addInclude(
                                "brand",
                                "category",
                                "category_brand",
                                "product",
                                "product_details",
                                "product_sku",
                                "product_spec",
                                "product_unit",
                                "sku_stock") // 设置需要生成的表名
                        // 实体策略 配置实体类 和 相应的注解 如lombok
                        // 设置父类 公共字段属性 和 扩展字段 代替vo
                        .entityBuilder()
                        .enableLombok()
                        .superClass(BaseEntity.class)
                        .addSuperEntityColumns(
                                "id",
                                "create_by",
                                "create_time",
                                "update_by",
                                "update_time",
                                "remark",
                                "del_flag")
                        //.addIgnoreColumns
                        .enableFileOverride()

                        // service策略
                        .serviceBuilder()
                        //.formatServiceFileName("I%sService") // 默认 可以给service层起名
                        .enableFileOverride()

                        // controller策略
                        .controllerBuilder()
                        .superClass(BaseController.class)
                        // 开启生成@RestController 控制器 restful风格
                        .enableRestStyle()
                        .enableFileOverride()
                )
                // 使用Freemarker引擎模板，默认的是Velocity引擎模板
                // 作用：生成代码时，根据模板生成对应代码
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }
}